using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using System.Text;
using Nextel.Utils;

public partial class Reporte_monitoreo_Geocerca : PageMapAbstract
{

    String[] latitud;
    String[] longitud;
    StringBuilder sbT = null;
    string latitudIni;
    string longitudIni;


    protected override void initialize()
    {

        btnGuardar.Text = IdiomaCultura.getMensaje(IdiomaCultura.WEB_GRABAR);
        btnObtener.Text = IdiomaCultura.getMensaje(IdiomaCultura.WEB_OBTENER).ToUpper();
        btnTodos.Text = IdiomaCultura.getMensaje(IdiomaCultura.WEB_TODOS);
        
        if (!Page.IsPostBack)
        {

            if (Request.QueryString["grabado"] != null)
            {
                lblMensaje.Text = IdiomaCultura.getMensaje(IdiomaCultura.WEB_DATOS_GUARDADOS);
                lblMensaje.Visible = true;
            }
            cargaZonas();

            if (ManagerConfiguration.laltitudlongitud != "0")
            {
                String[] latlo = ManagerConfiguration.laltitudlongitud.Split(',');

                latitudIni = latlo[0];
                longitudIni = latlo[1];
            }
            else
            {
                latitudIni = "- 12.0462037802177";
                longitudIni ="-77.0656585693359";
            }

            Literal ltrPuntoCentral = (Literal)FindControl("ltrPuntoCentral");
            ltrPuntoCentral.Text = getPuntoCentralInicio();

//            hidEstado.Value = "1";
        }
        


    }


    protected void btnGuardar_Click1(object sender, EventArgs e)
    {

        List<GeocercaBean> lstGeocerca = new List<GeocercaBean>();

        GeocercaBean bean = new GeocercaBean();
        bean.descripcion = txtDescripcion.Value.Trim().ToUpper();
        bean.puntos = hidPuntos.Value;
        bean.flag = AbstractBean.ACTIVO;
        bean.id = hidPk.Value;
        lblMensaje.Visible = true;

        //hidEstado.Value = "5";

        try
        {
            if (hidPuntos.Value.Length > 0)
            {
                //GRABA Y ACTUALIZA
                DBMonitoreo.addGeocercaBean(bean);

                lblMensaje.Text = IdiomaCultura.getMensajeEncodeHTML(IdiomaCultura.WEB_MENSAJE_EXITO);
                cargaZonas();
                //obtenerZona(bean.id);

                if (bean != null)
                {

                    lstGeocerca.Add(bean);
                    dibujarMapa(lstGeocerca, bean.DESCRIPCION, true);
                    lblMensaje.Visible = true;
                }

                hidPk.Value = bean.id;
                 
            }
            else
            {
                lblMensaje.Text = IdiomaCultura.getMensajeEncodeHTML(IdiomaCultura.WEB_MENSAJE_SELECCION);
                lblMensaje.Visible = true;
                if (hidPk.Value == "") {
                    ltrPoints.Text = "";
                    ltrTracking.Text = "";
                    hidPuntos.Value = "";
                }
                //txtDescripcion.Value = "";
            }
            
        }
        catch (Exception ex)
        {

            if (IdiomaCultura.WEB_DESCRIPCIONREPETIDO.Equals(ex.Message))
            {
                lblMensaje.Text = IdiomaCultura.getMensaje(ex.Message, bean.descripcion);
                lblMensaje.Visible = true;
            }
            else
            {
                BaseLN.registrarLog("ERROR:" + ex.Message);
                lblMensaje.Text = HttpUtility.HtmlEncode(ex.Message);
                lblMensaje.Visible = true;
            }

            if (hidPk.Value == "")
            {
                ltrPoints.Text = "";
                ltrTracking.Text = "";
                hidPuntos.Value = "";
            }

        }

    }

    protected void btnObtener_Click(object sender, EventArgs e)
    {
        hidPk.Value = cmbZonas.SelectedValue;
        //obtenerZona(hidPk.Value);
        List<GeocercaBean> lstGeocerca = new List<GeocercaBean>();
        GeocercaBean bean = DBMonitoreo.getGeocercaBeanPK(hidPk.Value);

        if (bean != null)
        {
            lstGeocerca.Add(bean);
            dibujarMapa(lstGeocerca, bean.DESCRIPCION, false);
            lblMensaje.Visible = false;
        }
        hidPk.Value = cmbZonas.SelectedValue;

        //hidEstado.Value = "5";
        
    }

    #region PUNTO CENTRAL INICIO
        private string getPuntoCentralInicio()
        {
            string stDev = "new google.maps.LatLng(0,0,true)";

            stDev = String.Format("new google.maps.LatLng({0},{1},true)", latitudIni, longitudIni);

            return stDev;
        }
     
        private string getPuntoCentral()
        {
            string stDev = "new google.maps.LatLng(0,0,true)";

            if ((longitud != null && longitud.Length > 0) && (latitud != null && latitud.Length > 0))
            {
                stDev = String.Format("new google.maps.LatLng({0},{1},true)", latitud[0], longitud[0]);
            }
            return stDev;
        }

        private string buildTracking()
        {
            string stPol = "poligono = new google.maps.Polygon({paths:0,strokeColor:0,strokeOpacity:0,strokeWeight:0,fillColor:0,fillOpacity:0});poligono.setMap(null);";

            if ((longitud != null && longitud.Length > 0) && (latitud != null && latitud.Length > 0))
            {
                sb = new StringBuilder();
                sbT = new StringBuilder();
                int i = 0;

                sbT.Append("var pointsaux= new Array();");
                for (i = 0; i <= longitud.Length - 1; i++)
                {
                    if (validaCoordenada(longitud[i], latitud[i]))
                    {
                        sbT.Append(String.Format("\n var point{0} = new google.maps.LatLng({1},{2});", i, latitud[i], longitud[i]));
                        sbT.Append(String.Format("\n pointsaux.push(point{0});", i));
                    }
                }

                try
                {
                    sbT.Append("poligono = new google.maps.Polygon({");
                    sbT.Append(String.Format("paths:pointsaux,strokeColor:{0},strokeOpacity:{1},strokeWeight:{2},fillColor:{3},fillOpacity:{4}", "'#FF0000'", "0.8", "2", "'#FF0000'", "0.35"));
                    sbT.Append("});poligono.setMap(map) ;   poligonos.push(poligono);");
                    stPol = sbT.ToString();
                }

                catch (Exception ex)
                {
                    throw ex;
                }
            }

            return stPol;
        }

    private string buildPoints()
    {

        if ((longitud != null && longitud.Length > 0) && (latitud != null && latitud.Length > 0))
        {
            sb = new StringBuilder();

            // Cambios en controles Para el Editar

            // Primera Parte
            //sb.Append("$('#IddivDireccion').show(); ");
            //sb.Append("$('#mostrar').addClass('arrow_top').removeClass('show');");
            sb.Append("$('#Poligono_btn').addClass('btn_puntos').removeClass('btn_poligono');");
            sb.Append("$('#Poligono_btn').attr('value', '" + IdiomaCultura.getMensaje(IdiomaCultura.WEB_PUNTOS).ToUpper() + "');");
            sb.Append("$('#eliminar_btn').hide( );");
           // sb.Append("$('#btnGuardar').hide( );");

            sb.Append("vertex=false;");

            // Segunda Parte

            sb.Append("$('#GuardarGeo').show(); ");
            //sb.Append("$('#MostrarGeo').addClass('arrow_top').removeClass('show');");

            // Fin de cambios en controles Para el Editar

            String datos = String.Empty;

            int i = 0;

            try
            {
                for (i = 0; i <= longitud.Length - 1; i++)
                {
                    if (validaCoordenada(longitud[i], latitud[i]))
                    {

                        sb.Append(String.Format("\n var point{0} = new google.maps.LatLng({1},{2});", i, latitud[i], longitud[i]));
                        sb.Append(String.Format("\n points.push(point{0});", i));
                        sb.Append(String.Format("\n var marker{0} = new google.maps.Marker(", i));
                        sb.Append("{");
                        sb.Append(String.Format("position: point{0}, map: null,draggable: true", i));
                        sb.Append("});");

                        sb.Append(String.Format("\n google.maps.event.addListener(marker{0}, 'dragend', function()", i));
                        sb.Append(" {  ");
                        sb.Append("\n for(var aux=0; aux<markers.length;aux++){");
                        sb.Append("\n if (markers[aux] == this){");
                        sb.Append("\n points[aux] = this.getPosition();");
                        sb.Append("\n }");
                        sb.Append(" \n }  ");
                        sb.Append(" \n reDraw();");
                        sb.Append("\n });");

                        sb.Append(String.Format("\n markers.push(marker{0});", i));
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        return sb.ToString();
    }

    #endregion

    protected void btnTodo_Click(object sender, EventArgs e)
    {

       List<GeocercaBean> lstGeoTodos = DBMonitoreo.findGeocercaBean();
       dibujarMapa(lstGeoTodos, " ", false);
       lblMensaje.Visible = false;

       //hidEstado.Value = "4";
      
    }

    //protected void btnLimpiar_Click(object sender, EventArgs e)
    //{

    //    limpiar();

    //    hidEstado.Value = "1";
      
    //}

    protected void dibujarMapa(List<GeocercaBean> lstGeoTodos, String strDescripcion, bool flgMensaje)
    {
        hidPk.Value = String.Empty;

        if (lstGeoTodos != null && lstGeoTodos.Count > 0)
        {
            String[] arrParams;
            String[] arrParamsTodos;
            String PuntoCentral = String.Empty;
            String Tracking = String.Empty;
            String Points = String.Empty;
            Literal ltrPuntoCentral = (Literal)FindControl("ltrPuntoCentral");
            ltrPuntoCentral.Text = getPuntoCentralInicio();
            Literal ltrTracking = (Literal)FindControl("ltrTracking");
            ltrTracking.Text = " ";
            Literal ltrPoints = (Literal)FindControl("ltrPoints");
            ltrPoints.Text = " ";

            //txtDescripcion.Disabled = false;

            txtDescripcion.Value = strDescripcion;
            idLabelGeocerca.Text = strDescripcion;

            if (strDescripcion.Trim().Equals(""))
            {

                Tracking = Tracking + "\n clearPoints();";
                //Tracking = Tracking + "\n $('#IddivDireccion').hide(); ";
             //   Tracking = Tracking + "\n $('#mostrar').addClass('show').removeClass('arrow_top');";
                Tracking = Tracking + "\n $('#Poligono_btn').addClass('btn_poligono').removeClass('btn_puntos');";
                Tracking = Tracking + "\n $('#Poligono_btn').attr('value', '" + IdiomaCultura.getMensaje(IdiomaCultura.WEB_POLIGONO).ToUpper() + "');";
                Tracking = Tracking + "\n $('#eliminar_btn').hide( );";

                /**/
                //Tracking = Tracking + "\n $('#btnGuardar').attr('disabled', 'disabled');";
                //Tracking = Tracking + "\n $('#btnGuardar').hide();";
                //Tracking = Tracking + "\n $('#txtDescripcion').hide( ); ";
                Tracking = Tracking + "\n vertex=true;";

            }

            //if (flgMensaje)
            //{
            //    Tracking = Tracking + "\n $('#mensaje').show();";
            //}
            //else
            //{
            //    Tracking = Tracking + "\n $('#mensaje').hide();";
            //}

            if (lstGeoTodos.Count > 0)
            {
                Int32 i = 0;
                Int32 j = 0;


                for (i = 0; i < lstGeoTodos.Count; i++)
                {
                    arrParamsTodos = lstGeoTodos[i].PUNTOS.Split('@');

                    longitud = new string[arrParamsTodos.Length];
                    latitud = new string[arrParamsTodos.Length];

                    for (j = 0; j <= arrParamsTodos.Length - 1; j++)
                    {
                        arrParams = arrParamsTodos[j].Split('|');
                        latitud[j] = arrParams[0].ToString();
                        longitud[j] = arrParams[1].ToString();
                        if (j == 0)
                        {
                            PuntoCentral = getPuntoCentral();
                        }

                    }
                    Tracking = Tracking + buildTracking();

                    Points = Points + buildPoints(); 

                    
                }
                ltrPuntoCentral.Text = PuntoCentral.ToString();
                ltrTracking.Text = Tracking.ToString();

                ltrPoints.Text = Points.ToString();

            }
            else
            {
                lblMensaje.Visible = true;
            }

        }
        else
        {
            lblMensaje.Visible = true;
        }
    }

    private void limpiar()
    {
       // txtDescripcion.Disabled = false;
        txtDescripcion.Value = "";
        idLabelGeocerca.Text = "";


        Literal ltrPuntoCentral = (Literal)FindControl("ltrPuntoCentral");
        ltrPuntoCentral.Text = getPuntoCentralInicio();

        Literal ltrTracking = (Literal)FindControl("ltrTracking");
        ltrTracking.Text = "";

        Literal ltrPoints = (Literal)FindControl("ltrPoints");
        ltrPoints.Text = "";

    }

    private void cargaZonas()
    {
        cmbZonas.DataSource = DALBase.getGeneralBean(AbstractBean.ACTIVO, "USPW_DASHBOARD_S_GEOCERCAXFLAG");
        cmbZonas.DataValueField = "CODIGO";
        cmbZonas.DataTextField = "NOMBRE";
        cmbZonas.DataBind();
    }




}
